package cgroups

import (
	"github.com/sirupsen/logrus"
	"mydocker/cgroups/resource"
)

type CgroupManager interface {
	Apply(pid int) error
	Set(res *resource.ResourceConfig) error
	Destroy() error
}

/*
NewCgroupManager 创建 CgroupManager，支持 Cgroup v1 或 Cgroup v2
  - cgroup v1：允许多个层次结构（hierarchies），每个层次结构可以启用不同的控制器。这种设计虽然灵活，但也带来了复杂性和管理上的困难。
  - cgroup v2：采用单一统一的层次结构设计，所有控制器和资源管理都在这一个层次结构中进行。这种设计简化了管理，并减少了资源管理的复杂性。
*/
func NewCgroupManager(path string) CgroupManager {
	if IsCgroup2UnifiedMode() {
		logrus.Infof("use cgroup v2")
		return NewCgroupManagerV2(path)
	}
	logrus.Infof("use cgroup v1")
	return NewCgroupManagerV1(path)
}
